import { mapValues } from '@peng_kai/kit/libs/lodash-es';
import { createI18n } from '@peng_kai/kit/libs/vue-i18n';
import { addDatetimeFormat, LocaleManager, omitLocale } from '@peng_kai/kit/utils/locale';

export { $d, $n, $t, i18n, localeManager };

const excludeLocales: string[] = []; // 排除的语言包
const localeManager = new LocaleManager({
  meta: omitLocale(
    import.meta.glob('/src/modules/locale/*/meta.ts', { eager: true, import: 'default' }),
    excludeLocales,
  ),
  message: omitLocale(
    import.meta.glob('/src/modules/locale/*/index.ts', { import: 'message' }),
    excludeLocales,
  ),
});

const datetimeFormats = {
  /** 年/月/日 */
  ...addDatetimeFormat('date', { year: 'numeric', month: '2-digit', day: '2-digit' }),
  /** 月/日 */
  ...addDatetimeFormat('md', { month: '2-digit', day: '2-digit' }),
  /** 时:分:秒 */
  ...addDatetimeFormat('time', { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false }),
  /** 年/月/日 时:分:秒 */
  ...addDatetimeFormat('full', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false }),
  /** 月/日 时:分:秒 */
  ...addDatetimeFormat('mdhms', { month: '2-digit', day: '2-digit', hour: 'numeric', minute: 'numeric', second: 'numeric', hour12: false }),
  /** 月/日 时:分:秒 */
  ...addDatetimeFormat('mdhm', { month: '2-digit', day: '2-digit', hour: 'numeric', minute: 'numeric', hour12: false }),
};

const i18n = createI18n({
  fallbackLocale: 'en-US',
  availableLocales: localeManager.localesAvailable,
  silentFallbackWarn: true,
  legacy: false,
  datetimeFormats: mapValues(localeManager.localeMetas, () => datetimeFormats),
});

const $d = i18n.global.d.bind(i18n.global);
const $n = i18n.global.n.bind(i18n.global);
const $t = i18n.global.t.bind(i18n.global);
